// libreria funzioni per la geolocalizzazione html5 e maps, localizzazione degli indirizzi

var address;

/////////////////////////////////////////////////////////////
//////////funzioni per la geolocalizzazione html5////////////
/////////////////////////////////////////////////////////////

function success(position) {
	var s = document.querySelector('#status');
        
        if (s.className == 'success') {
                // not sure why we're hitting this twice in FF, I think it's to do with a cached result coming back    
                return;
        }
        s.className = 'success';

	// centro la mappa sulla posizione trovata
	
	MYlatlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
	
	MYmarker.setPosition(MYlatlng);
	
	gMap.setCenter(MYlatlng);	
	gMap.setZoom(zoomLevel);
	
	
	var partenza = document.querySelector('#partenza');
	var indirizzo_geo = codeLatLng(MYlatlng);	
	if(indirizzo_geo) partenza.value = indirizzo_geo;
	
}

function error(msg) {
	var s = document.querySelector('#status');
	s.innerHTML = typeof msg == 'string' ? msg : "failed";
	s.className = 'fail';
	// console.log(arguments);
}





//////////////////////////////////////////////////////////////////////////////////////
///////////////////////////georeferenziazione di un indirizzo/////////////////////////
//////////////////////////////////////////////////////////////////////////////////////

function codeAddress() {
	address = document.getElementById("address").value;
	geocoder.geocode( { 'address': address}, function(results, status) {
		if (status == google.maps.GeocoderStatus.OK) {
			MYlatlng = results[0].geometry.location;
			gMap.setCenter(MYlatlng);
			gMap.setZoom(zoomLevel);
			
			MYmarker.setPosition(MYlatlng);
		} else {
			error("Geocode was not successful for the following reason: " + status);
		}
	});
}


/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// reverse geocoding ///////////////////////////////////
///// prende in input un oggetto latlng e restituisce la stringa dell'indirizzo /////
/////////////////////////////////////////////////////////////////////////////////////


function codeLatLng(ltlg) {
	indirizzo_reverse = false;
    geocoder.geocode({'latLng': ltlg}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        if (results[0]) {
          	indirizzo_geo = String(results[0].formatted_address);
			return true;
        } else {
          error("No results found");
        }
      } else {
        error("Geocoder failed due to: " + status);
      }
	  return false;
    });
	
	return indirizzo_reverse;
}